/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2008，所有权利保留。
 * 
 * 项目名：	rumba-web
 * 文件名：	TitlePanel.java
 * 模块说明：	
 * 修改历史：
 * Jul 6, 2008 - lxm - 创建。
 */
package com.hd123.rumba.gwt.widget2.client.panel;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Widget;

/**
 * 模块标题，界面部件
 * 
 * @author lxm
 * 
 */
public class RTitlePanel extends HorizontalPanel {

  private static final String STYLENAME = "rb-TitlePanel";
  private static final String STYLENAME_INNER = "rb-TitlePanel-inner";
  private static final String STYLENAME_ITEM_SMALL = "rb-TitlePanel-item-small";
  private static final String sTYLENAME_ITEM_BIGGER = "rb-TitlePanel-item-bigger";

  private static final String DEPENDENT_STYLENAME_SMALL = "small";
  private static final String DEPENDENT_STYLENAME_BIGGER = "bigger";

  private static final String HTML_SEPERATOR = "<font style=\"font-family:宋体;\">&gt;&gt;</font>";

  /** 小号尺寸 */
  public static final int SIZE_SMALL = 0;

  /** 大号尺寸 */
  public static final int SIZE_BIGGER = 1;

  /** 尺寸，取值为SIZE_* */
  private int size = SIZE_SMALL;

  /**
   * 构造函数
   */
  public RTitlePanel() {
    super();
    drawSelf();
  }

  /**
   * 尺寸，取值为SIZE_*，默认为SIZE_SMALL
   * 
   * @return
   */
  public int getSize() {
    return size;
  }

  /**
   * 设置尺寸，取值为SIZE_*，默认为SIZE_SMALL
   * 
   * @param size
   */
  public void setSize(int size) {
    if (this.size == size)
      return;

    this.size = size;
    if (size == SIZE_SMALL) {
      removeStyleDependentName(DEPENDENT_STYLENAME_BIGGER);
      addStyleDependentName(DEPENDENT_STYLENAME_SMALL);
    } else if (size == SIZE_BIGGER) {
      removeStyleDependentName(DEPENDENT_STYLENAME_SMALL);
      addStyleDependentName(DEPENDENT_STYLENAME_BIGGER);
    }
  }

  /**
   * 取得当前图标所对应的URL。
   * 
   * @return
   */
  public String getIconUrl() {
    return imgIcon.getUrl();
  }

  /**
   * 设置图标。将导致界面发生变化。
   * 
   * @param iconUrl
   */
  public void setIconUrl(String iconUrl) {
    imgIcon.setUrl(iconUrl);
  }

  /**
   * 清除所有的标题信息。将导致界面发生变化。
   */
  public void clearTitles() {
    this.titles.clear();
    refreshTitles();
  }

  /**
   * 将一个标题压入栈。
   * 
   * @param title
   *          指定包含标题的界面部件。例如HyperLink。
   * @throws ClientBizException
   */
  public void pushTitle(Widget title) {
    titles.add(title);
    refreshTitles();
  }

  /**
   * 将一个标题压入栈。
   * 
   * @param titleAsHtml
   *          指定标题对应的html文本。
   * @throws ClientBizException
   */
  public void pushTitle(String titleAsHtml) {
    titles.add(new HTML(titleAsHtml));
    refreshTitles();
  }

  /**
   * 标题栈的出栈动作。
   */
  public void popTitle() {
    if (titles.size() > 0) {
      titles.remove(titles.size() - 1);
      refreshTitles();
    }
  }

  /**
   * 取得所有的标题。
   * 
   * @return
   */
  public Widget[] getTitles() {
    return (Widget[]) titles.toArray();
  }

  /**
   * 取得当前拥有的标题计数。
   * 
   * @return
   */
  public int countOfTitles() {
    return titles.size();
  }

  /**
   * 取得指定索引的标题。
   * 
   * @param index
   * @return
   */
  public Widget getTitle(int index) {
    return (Widget) titles.get(index);
  }

  private List titles = new ArrayList();

  private Image imgIcon;
  private HorizontalPanel pnlTitle;

  private void drawSelf() {
    setStyleName(STYLENAME);
    addStyleDependentName(DEPENDENT_STYLENAME_SMALL);
    setWidth("100%");

    imgIcon = new Image();
    add(imgIcon);
    setCellWidth(imgIcon, "16px");
    setCellVerticalAlignment(imgIcon, HasAlignment.ALIGN_MIDDLE);

    pnlTitle = new HorizontalPanel();
    pnlTitle.setStyleName(STYLENAME_INNER);
    pnlTitle.setSpacing(4);
    add(pnlTitle);
    setCellHorizontalAlignment(pnlTitle, HorizontalPanel.ALIGN_LEFT);
    setCellVerticalAlignment(pnlTitle, HorizontalPanel.ALIGN_MIDDLE);
  }

  private void refreshTitles() {
    String styleName = "";
    if (size == SIZE_SMALL)
      styleName = STYLENAME_ITEM_SMALL;
    else if (size == SIZE_BIGGER)
      styleName = sTYLENAME_ITEM_BIGGER;

    pnlTitle.clear();
    for (int i = 0; i < titles.size(); i++) {
      if (i != 0) {
        HTML sep = new HTML(HTML_SEPERATOR);
        sep.addStyleName(styleName);
        pnlTitle.add(sep);
        pnlTitle.setCellVerticalAlignment(sep, HasAlignment.ALIGN_MIDDLE);
      }
      Widget widget = (Widget) titles.get(i);
      widget.addStyleName(styleName);
      pnlTitle.add(widget);
    }
  }

}
